
export enum ValueType {
    None = "none",
    String = "string",
    Char = "char",
    Timestamp = "timestamp",
    Datetime = "datetime",
    Boolean = "boolean",
    Number = "number",
    Float = "float",
    Bytes = "bytes",
    Array = "array",
    Object = "object",
}

export enum ValueSize {
    Tiny = "tiny",
    Short = "short",
    Normal = "normal",
    Medium = "medium",
    Long = "long",
}

export const stringToValueType = (valueType: string) => {
    let vt = valueType.toLocaleLowerCase();
    if (vt === 'none') {
        return ValueType.None;
    } else if (vt === 'string') {
        return ValueType.String;
    } else if (vt === 'char') {
        return ValueType.Char;
    } else if (vt === 'timestamp') {
        return ValueType.Timestamp;
    } else if (vt === 'datetime') {
        return ValueType.Datetime;
    } else if (vt === 'boolean') {
        return ValueType.Boolean;
    } else if (vt === 'number') {
        return ValueType.Number;
    } else if (vt === 'float') {
        return ValueType.Float;
    } else if (vt === 'bytes') {
        return ValueType.Bytes;
    } else if (vt === 'array') {
        return ValueType.Array;
    } else if (vt === 'object') {
        return ValueType.Object;
    } else {
        return ValueType.String;
    }
}

export const valueTypeToString = (valueType: ValueType): string => {

    switch (valueType) {
        case ValueType.None: return "none";
        case ValueType.String: return "string";
        case ValueType.Char: return "char";
        case ValueType.Timestamp: return "timestamp";
        case ValueType.Datetime: return "datetime";
        case ValueType.Boolean: return "boolean";
        case ValueType.Number: return "int";
        case ValueType.Float: return "float";
        case ValueType.Bytes: return "bytes";
        case ValueType.Array: return "array";
        case ValueType.Object: return "object";
    }
    return "string";
}


export const VALUE_TYPE_SELECT_OPTIONS = [
    { value: 'string', label: '字符串' },
    { value: 'boolean', label: '布尔' },
    { value: 'number', label: '整数' },
    { value: 'float', label: '浮点数' },
    { value: 'bytes', label: '字节数组' },
    { value: 'array', label: '数组' },
    { value: 'object', label: '对象' },
    { value: 'char', label: '字符' },
    { value: 'timestamp', label: '时间戳' },
    { value: 'datetime', label: '时间' },
    { value: 'none', label: '空' },
];


export const COLLECTION_TYPE_SELECT_OPTIONS = [
    { value: 'single', label: '单值' },
    { value: 'pair', label: '二元组' },
    { value: 'triple', label: '三元组' },
    { value: 'tuple()', label: '元组' },
    { value: 'array()', label: '数组' },
];

export const VALUE_SIZE_SELECT_OPTIONS = [
    { value: 'tiny', label: 'tiny' },
    { value: 'short', label: 'short' },
    { value: 'normal', label: 'normal' },
    { value: 'medium', label: 'medium' },
    { value: 'long', label: 'long' },
];

export const RELATION_TYPE_SELECT_OPTIONS = [
    { value: '组合', label: '组合' },
    { value: '聚合', label: '聚合' },
    { value: '继承', label: '继承' },
];

// password	密码输入框
// money	金额输入框
// textarea	文本域
// date	日期
// dateTime	日期时间
// dateWeek	周
// dateMonth	月
// dateQuarter	季度输入
// dateYear	年份输入
// dateRange	日期区间
// dateTimeRange	日期时间区间
// time	时间
// timeRange	时间区间
// text	文本框
// select	下拉框
// treeSelect	树形下拉框
// checkbox	多选框
// rate	星级组件
// radio	单选框
// radioButton	按钮单选框
// progress	进度条
// percent	百分比组件
// digit	数字输入框
// second	秒格式化
// avatar	头像
// code	代码框
// switch	开关
// fromNow	相对于当前时间
// image	图片
// jsonCode	代码框，但是带了 json 格式化
// color	颜色选择器
// cascader	级联选择器
// segmented	分段器
// group	分组
// formList	表单列表
// formSet	表单集合
// divider	分割线
// dependency	依赖项
export const getAntdFormItemType = (valueType: string, valueSize: ValueSize) => {
    let vt = stringToValueType(valueType);

    switch (valueType) {
        case ValueType.None: return "None";
        case ValueType.String: {

            switch (valueSize) {
                case ValueSize.Normal: {
                    return 'textarea'
                }
            }
            return 'text'
        }
        case ValueType.Char: return "Char";
        case ValueType.Timestamp: {
            return 'dateTime';
        }
        case ValueType.Datetime: return "Datetime";
        case ValueType.Boolean: {
            return "switch";
        }
        case ValueType.Number: return "Int";
        case ValueType.Float: return "Float";
        case ValueType.Bytes: return "Bytes";
        case ValueType.Array: return "Array";
        case ValueType.Object: return "Object";
    }
    return "String";
}